// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Styling/SlateStyle.h"

/**
 * 
 */
class LISTLIBRARY_API ListUIStyle
{
public:
	static void InitResource();

	//初始化图片
	static void InitImage();
	//自动加载图片
	static void LoadAllImage();
	//添加图片
	static void AddImage(FString Path, const FString Name, ESlateBrushDrawType::Type InDrawType, const FMargin& InMargin, ESlateBrushTileType::Type InTiling, ESlateBrushImageType::Type InImageType, const FVector2D& InImageSize, const FSlateColor& InTint);
	//获取临时图片
	static FSlateBrush* GetTempImage(FString Path, const FName Name, ESlateBrushDrawType::Type InDrawType, const FMargin& InMargin, ESlateBrushTileType::Type InTiling, ESlateBrushImageType::Type InImageType, const FVector2D& InImageSize, const FSlateColor& InTint);
	//获取图片
	static FSlateBrush* GetImage(FString ImageName);
	//更新图片
	static bool UpdataImageStyle(FString ImageName, FSlateBrush* style);

	//初始化按钮资源
	static void InitButtonStyle();
	//获取按钮资源
	static FButtonStyle* GetButtonStyle(FString ButtonStyleName);
	//更新按钮样式
	static bool UpdateButtonStyle(FString ButtonStyleName, FButtonStyle* ButtonStyle);

	//初始化选择框资源
	static void InitCheckBoxStyle();
	//获取选择框样式
	static FCheckBoxStyle* GetCheckBoxStyle(FString CheckBoxStyleName);
	//更新单选框样式
	static bool UpdateCheckBoxStyle(FString CheckBoxStyleName, FCheckBoxStyle* CheckBoxStyle);

	//初始化字体
	static void InitFont();
	//添加字体
	static void AddFont(FString FontPath, FString FontName);
	//获取字体
	static FSlateFontInfo GetFont(FString FontName, uint16 size);
	//添加字体样式
	static void InitFSlateFontInfo();
	static void AddFSlateFontInfo(FString FontStyleName);
	//获取字体样式
	static FTextBlockStyle* GetTextBlockStyle(FString TextBlockStyleName);
	//更新字体样式
	static bool UpdateTextBlockStyle(FString TextBlockStyleName,FTextBlockStyle* TextBlockStyle);
	//初始化其他资源
	static void InitOtherStyle();
	//颜色转字符串
	static FString FLinearColorToFString(FLinearColor InColor);
	//字符串转颜色
	static FLinearColor FStringToFLinearColor(FString strColor);
	static FName GetStyleSetName();
	static void ShutDown();
	static const ISlateStyle& Get();


private:
	static TSharedRef<FSlateStyleSet> Create();

	static TSharedPtr<FSlateStyleSet> StyleInstance;
public:
	//播放滑块
	static FSliderStyle* SliderStyle;
	//高斯模糊值
	static uint16 BlurValue;
	//背景颜色
	static FLinearColor DialogColor;
	//窗口背景框阴影宽
	static uint16 WindowShadowWidth;
	//窗口背景框阴影高
	static uint16 WindowShadowHigh;
	//窗口背景框阴影宽
	static uint16 WindowLeftShadowWidth;
	//窗口背景框阴影高
	static uint16 WindowTopShadowHigh;
private:
	//存放的图片
	static TMap<FString, FSlateBrush*> CustomFSlateBrush;
	//存放的按钮
	static TMap<FString, FButtonStyle*> CustomButtonStyle;
	//存放的单选框
	static TMap<FString, FCheckBoxStyle*> CustomCheckBoxStyle;
	//存放的自定义字体
	static TMap<FString, UFont*> CustomFont;
	//自定义字体样式
	static TMap<FString,FTextBlockStyle*> CustomSlateFontInfo;
};
